// utils/api.js
// 导入API配置
const apiConfig = require('../config/api.js');
const baseUrl = apiConfig.baseUrl;

/**
 * 统一的API请求方法
 * @param {Object} options - 请求配置
 * @param {String} options.url - 请求路径（相对路径，会自动拼接baseUrl）
 * @param {String} options.method - 请求方法（GET/POST/PUT/DELETE等）
 * @param {Object} options.data - 请求数据
 * @param {Object} options.header - 请求头
 * @param {Boolean} options.needAuth - 是否需要认证（默认true）
 */
function request(options) {
  const app = getApp();
  const header = options.header || {};
  const needAuth = options.needAuth !== false; // 默认需要认证
  
  // 添加认证头
  if (needAuth && app.globalData.token) {
    header['Authorization'] = `Bearer ${app.globalData.token}`;
  }
  
  // 拼接完整URL
  const fullUrl = baseUrl + options.url;
  
  console.log(`[API请求] ${options.method || 'GET'} ${fullUrl}`);
  
  return new Promise((resolve, reject) => {
    wx.request({
      url: fullUrl,
      method: options.method || 'GET',
      data: options.data || {},
      header: header,
      timeout: options.timeout || 10000,
      success: (res) => {
        console.log(`[API响应] ${res.statusCode} ${fullUrl}`, res.data);
        
        if (res.statusCode === 401) {
          // token过期，清除本地存储并跳转到登录页
          wx.removeStorageSync('token');
          app.globalData.token = null;
          wx.redirectTo({
            url: '/pages/auth/login'
          });
          reject(res);
        } else {
          resolve(res);
        }
      },
      fail: (err) => {
        console.error(`[API失败] ${fullUrl}`, err);
        reject(err);
      }
    });
  });
}

// 格式化日期
function formatDate(date) {
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0');
  const day = String(date.getDate()).padStart(2, '0');
  return `${year}-${month}-${day}`;
}

// 格式化时间
function formatTime(date) {
  const hours = String(date.getHours()).padStart(2, '0');
  const minutes = String(date.getMinutes()).padStart(2, '0');
  return `${hours}:${minutes}`;
}

// 格式化金额
function formatPrice(price) {
  return parseFloat(price).toFixed(2);
}

module.exports = {
  request,
  formatDate,
  formatTime,
  formatPrice
};